/**
给定一个非负整数数组 nums ，你最初位于数组的 第一个下标 。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个下标。

 

示例 1：

输入：nums = [2,3,1,1,4]
输出：true
解释：可以先跳 1 步，从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。

*/
class Solution {
       public boolean canJump(int[] nums) {
        if(nums.length==0){
            return false;
        }
        int max=0;
        int left=nums[0];
        for(int i=0;i<=left&&i<nums.length;i++){
            max=Math.max(max,i+nums[i]);
            left=Math.max(left,i+nums[i]);
            System.out.println(max+"left"+left);
        }
       
        
        return (max>= (nums.length-1));
    }
    // public boolean canJump(int[] nums) {
    //     if(nums.length==0){
    //         return false;
    //     }
    //     boolean []res=new boolean[nums.length];
    //     res[0]=true;
    //     for(int i=0;i<nums.length;i++){
    //         if(res[i]==true){
    //           for(int j=i+1;j<=nums[i]+i&&j<nums.length;j++){
    //             res[j]=true;
    //         }  
    //         }
    //     }
    //     return res[res.length-1];
    // }
}